package leetCode.offer65;

/**
 * 写一个函数，求两个整数之和，要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
 * 示例:
 * 输入: a = 1, b = 1
 * 输出: 2
 *
 * 提示：
 * a,b均可能是负数或 0
 * 结果不会溢出 32 位整数
 */
public class Solution1 implements Solution {

    /**
     * 使用位运算符实现加法
     * @param a
     * @param b
     * @return
     */
    @Override
    public int add(int a, int b) {
        // 得到可以产生进位的地方
        int ab_and = (a&b)<<1;
        int ab_xor = a^b;
        return ab_and==0?ab_xor:add(ab_xor,ab_and);
    }

    public static void main(String[] args) {
        Solution1 solution1 = new Solution1();
        System.out.println(solution1.add(-2,-8));
    }

}
